实现单链表 | 您所在的位置:网站首页 › Breakout POINT数据 › 实现单链表 |
单链表的结构
单链表结点的组成: 元素链接域(保存下一结点的地址)![]() TODO:补充单链表的特性 实现 定义节点类节点是链表的基本组成部分 class Node : # 只定义初始化操作 def __init__(self, elm, next_=None): self.elem = elem # 因为Python中next是一个内置的函数,为区分,故在变量名后添加"_" self.next_ = next_ 定义单链表类 # 单链表类只有一个 _head 域,表示单链表的头指针 class SingleList: def __init__(self): self._head = None变量前的单下划线表示私有变量,不要在对象的外部去访问。python语言没有为定义私有变量提供专门的机制,只能通过约定和良好的编程习惯来保护对象的私有属性。 定义异常类为了能合理处理一些链表操作中遇到的错误状态,如在执行方法时遇到了无法操作的错误参数,首先定义一个异常类LinkedListUnderflow,这里将它定义为标准异常类ValueError的子类,pass表示空语句,即什么都不做。 TODO: 在这里直接抛出ValueError也没问题,但定义了自己的异常类就可以写专门的异常处理器。 class LinkedListUnderflow(ValueError): pass 对链表的具体操作 删除链表在Python中,如果一个对象未被引用,则该对象会被当做垃圾并进行回收。所以删除链表只需将头指针设为None,使得链表对象不被引用 def del_list(self): self._head = None 判断表空在Python里检查_head值是否为None,如果为None,则说明_head不指向任何对象 def is_empty(self): return self._head is None 判断表满因为链表没有一个固定的容量,可以动态扩充,所以在内容充足的情况下,链表是不会满的 链表长度算法描述: 创建计数器遍历至最后一个节点代码实现: def length(self): '''计算链表长度''' point = self._head count = 1 while point.next_ != None: point = point.next_ count += 1 return count思考1:为什么需要新建一个point变量 遍历链表算法描述: 创建计数器遍历至最后一个节点算法实现: def traverse(self): '''遍历链表''' point = self._head index = 0 while point.next_ != None: index += 1 print("第", index, "个元素是:", point.elem) point = point.next_ print("第", (index + 1), "个元素是:", point.elem)思考2:如何确定循环结束的条件? 定位元素–按下标定位算法描述: 判断下标的合法性根据计数器找指定下标的元素代码实现: def index(self, index_): '''定位元素--按下标定位''' if index_ >= self.length() and index_ = self.length() and index |
CopyRight 2018-2019 实验室设备网 版权所有 |